// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "UI/LyraSimulatedInputWidget.h"

#include "LyraTouchRegion.generated.h"

#define UE_API LYRAGAME_API

class UObject;
struct FFrame;
struct FGeometry;
struct FPointerEvent;

/**
 * "触摸区域"用于定义屏幕上的一个区域，当用户用手指按下它时应该触发一些输入
 */
UCLASS(MinimalAPI, meta=( DisplayName="Lyra Touch Region" ))
class ULyraTouchRegion : public ULyraSimulatedInputWidget
{
	GENERATED_BODY()
	
public:
	
	//~ Begin UUserWidget
	/**
	 * 触摸开始时的原生处理
	 * @param InGeometry 几何信息
	 * @param InGestureEvent 手势事件
	 * @return 回复
	 */
	UE_API virtual FReply NativeOnTouchStarted(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent) override;
	/**
	 * 触摸移动时的原生处理
	 * @param InGeometry 几何信息
	 * @param InGestureEvent 手势事件
	 * @return 回复
	 */
	UE_API virtual FReply NativeOnTouchMoved(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent) override;
	/**
	 * 触摸结束时的原生处理
	 * @param InGeometry 几何信息
	 * @param InGestureEvent 手势事件
	 * @return 回复
	 */
	UE_API virtual FReply NativeOnTouchEnded(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent) override;
	/**
	 * 原生Tick函数
	 * @param MyGeometry 几何信息
	 * @param InDeltaTime 增量时间
	 */
	UE_API virtual void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override;
	//~ End UUserWidget interface

	/**
	 * 是否应该模拟输入
	 * @return 如果应该模拟输入则返回true
	 */
	UFUNCTION(BlueprintCallable)
	bool ShouldSimulateInput() const { return bShouldSimulateInput; }

protected:

	/** 当此控件被触摸时为true */
	bool bShouldSimulateInput = false; // 应该模拟输入的标志
};

#undef UE_API